home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / audio / AudioDevice.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  5.3 KB  |  225 lines

  1. package sun.audio;
  2.  
  3. import com.sun.media.sound.DataPusher;
  4. import com.sun.media.sound.Toolkit;
  5. import java.io.BufferedInputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.util.Hashtable;
  9. import java.util.Vector;
  10. import javax.sound.midi.InvalidMidiDataException;
  11. import javax.sound.midi.MidiFileFormat;
  12. import javax.sound.midi.MidiSystem;
  13. import javax.sound.midi.MidiUnavailableException;
  14. import javax.sound.midi.Sequencer;
  15. import javax.sound.sampled.AudioFormat;
  16. import javax.sound.sampled.AudioInputStream;
  17. import javax.sound.sampled.AudioSystem;
  18. import javax.sound.sampled.DataLine;
  19. import javax.sound.sampled.LineUnavailableException;
  20. import javax.sound.sampled.Mixer;
  21. import javax.sound.sampled.SourceDataLine;
  22. import javax.sound.sampled.UnsupportedAudioFileException;
  23. import javax.sound.sampled.AudioFormat.Encoding;
  24.  
  25. public class AudioDevice {
  26.    private boolean DEBUG = false;
  27.    private Hashtable clipStreams = new Hashtable();
  28.    private Vector infos = new Vector();
  29.    private boolean playing = false;
  30.    private Mixer mixer = null;
  31.    public static final AudioDevice device = new AudioDevice();
  32.  
  33.    private AudioDevice() {
  34.    }
  35.  
  36.    private synchronized void startSampled(AudioInputStream var1, InputStream var2) throws UnsupportedAudioFileException, LineUnavailableException {
  37.       Object var3 = null;
  38.       Object var4 = null;
  39.       Object var5 = null;
  40.       Object var6 = null;
  41.       var1 = Toolkit.getPCMConvertedAudioInputStream(var1);
  42.       if (var1 != null) {
  43.          DataLine.Info var10 = new DataLine.Info(SourceDataLine.class, var1.getFormat());
  44.          if (AudioSystem.isLineSupported(var10)) {
  45.             SourceDataLine var11 = (SourceDataLine)AudioSystem.getLine(var10);
  46.             DataPusher var9 = new DataPusher(var11, var1);
  47.             Info var8 = new Info(this, (Sequencer)null, var2, var9);
  48.             this.infos.addElement(var8);
  49.             var9.start();
  50.          }
  51.       }
  52.    }
  53.  
  54.    private synchronized void startMidi(InputStream var1, InputStream var2) throws InvalidMidiDataException, MidiUnavailableException {
  55.       Object var3 = null;
  56.       Object var4 = null;
  57.       Sequencer var7 = MidiSystem.getSequencer();
  58.       var7.open();
  59.  
  60.       try {
  61.          var7.setSequence(var1);
  62.       } catch (IOException var6) {
  63.          throw new InvalidMidiDataException(var6.getMessage());
  64.       }
  65.  
  66.       Info var8 = new Info(this, var7, var2, (DataPusher)null);
  67.       this.infos.addElement(var8);
  68.       var7.addMetaEventListener(var8);
  69.       var7.start();
  70.    }
  71.  
  72.    public synchronized void openChannel(InputStream var1) {
  73.       if (this.DEBUG) {
  74.          System.out.println("AudioDevice: openChannel");
  75.          System.out.println("input stream =" + var1);
  76.       }
  77.  
  78.       Object var2 = null;
  79.  
  80.       for(int var3 = 0; var3 < this.infos.size(); ++var3) {
  81.          Info var21 = (Info)this.infos.elementAt(var3);
  82.          if (var21.in == var1) {
  83.             return;
  84.          }
  85.       }
  86.  
  87.       Object var22 = null;
  88.       if (var1 instanceof AudioStream) {
  89.          if (((AudioStream)var1).midiformat != null) {
  90.             try {
  91.                this.startMidi(((AudioStream)var1).stream, var1);
  92.             } catch (Exception var20) {
  93.                return;
  94.             }
  95.          } else if (((AudioStream)var1).ais != null) {
  96.             try {
  97.                this.startSampled(((AudioStream)var1).ais, var1);
  98.             } catch (Exception var19) {
  99.                return;
  100.             }
  101.          }
  102.       } else if (var1 instanceof AudioDataStream) {
  103.          if (var1 instanceof ContinuousAudioDataStream) {
  104.             try {
  105.                AudioInputStream var4 = new AudioInputStream(var1, ((AudioDataStream)var1).getAudioData().format, -1L);
  106.                this.startSampled(var4, var1);
  107.             } catch (Exception var18) {
  108.                return;
  109.             }
  110.          } else {
  111.             try {
  112.                AudioInputStream var24 = new AudioInputStream(var1, ((AudioDataStream)var1).getAudioData().format, (long)((AudioDataStream)var1).getAudioData().buffer.length);
  113.                this.startSampled(var24, var1);
  114.             } catch (Exception var17) {
  115.                return;
  116.             }
  117.          }
  118.       } else {
  119.          BufferedInputStream var25 = new BufferedInputStream(var1, 1024);
  120.  
  121.          try {
  122.             try {
  123.                var23 = AudioSystem.getAudioInputStream(var25);
  124.             } catch (IOException var14) {
  125.                return;
  126.             }
  127.  
  128.             this.startSampled(var23, var1);
  129.          } catch (UnsupportedAudioFileException var15) {
  130.             try {
  131.                try {
  132.                   MidiFileFormat var6 = MidiSystem.getMidiFileFormat(var25);
  133.                } catch (IOException var11) {
  134.                   return;
  135.                }
  136.  
  137.                this.startMidi(var25, var1);
  138.             } catch (InvalidMidiDataException var12) {
  139.                AudioFormat var7 = new AudioFormat(Encoding.ULAW, 8000.0F, 8, 1, 1, 8000.0F, true);
  140.  
  141.                try {
  142.                   AudioInputStream var8 = new AudioInputStream(var25, var7, -1L);
  143.                   this.startSampled(var8, var1);
  144.                } catch (UnsupportedAudioFileException var9) {
  145.                   return;
  146.                } catch (LineUnavailableException var10) {
  147.                   return;
  148.                }
  149.             } catch (MidiUnavailableException var13) {
  150.                return;
  151.             }
  152.          } catch (LineUnavailableException var16) {
  153.             return;
  154.          }
  155.       }
  156.  
  157.       this.notify();
  158.    }
  159.  
  160.    public synchronized void closeChannel(InputStream var1) {
  161.       if (this.DEBUG) {
  162.          System.out.println("AudioDevice.closeChannel");
  163.       }
  164.  
  165.       if (var1 != null) {
  166.          for(int var3 = 0; var3 < this.infos.size(); ++var3) {
  167.             Info var2 = (Info)this.infos.elementAt(var3);
  168.             if (var2.in == var1) {
  169.                if (var2.sequencer != null) {
  170.                   var2.sequencer.stop();
  171.                   this.infos.removeElement(var2);
  172.                } else if (var2.datapusher != null) {
  173.                   var2.datapusher.stop();
  174.                   this.infos.removeElement(var2);
  175.                }
  176.             }
  177.          }
  178.  
  179.          this.notify();
  180.       }
  181.    }
  182.  
  183.    public synchronized void open() {
  184.    }
  185.  
  186.    public synchronized void close() {
  187.    }
  188.  
  189.    public void play() {
  190.       if (this.DEBUG) {
  191.          System.out.println("exiting play()");
  192.       }
  193.  
  194.    }
  195.  
  196.    public synchronized void closeStreams() {
  197.       for(int var2 = 0; var2 < this.infos.size(); ++var2) {
  198.          Info var1 = (Info)this.infos.elementAt(var2);
  199.          if (var1.sequencer != null) {
  200.             var1.sequencer.stop();
  201.             var1.sequencer.close();
  202.             this.infos.removeElement(var1);
  203.          } else if (var1.datapusher != null) {
  204.             var1.datapusher.stop();
  205.             this.infos.removeElement(var1);
  206.          }
  207.       }
  208.  
  209.       if (this.DEBUG) {
  210.          System.err.println("Audio Device: Streams all closed.");
  211.       }
  212.  
  213.       this.clipStreams = new Hashtable();
  214.       this.infos = new Vector();
  215.    }
  216.  
  217.    public int openChannels() {
  218.       return this.infos.size();
  219.    }
  220.  
  221.    void setVerbose(boolean var1) {
  222.       this.DEBUG = var1;
  223.    }
  224. }
  225.